,0L0KGRAPHIC9(  Error: No DOS(0 )0 / 0/(0/)00ֹ/ / Ȅ`l0  1 1%7x0 1 1 18H 1(哅h k1 y0L0l00DEH B VL0@   Y0`0.` a000. 08&.` 0mm 8 L1ƕƔ 1擥`(MAIN  1TWOSNDS ACT V! *ID1BILL ACT V"+/' D2BILL ACT V#$<UD3BILL ACT V&*A D4BILL ACT V'Ms MOVEDEMOACT V)X SKYBLUE1ACT V*5eIDLISUB ACT V-htSCRL ACT V-*~BCONNIE GR9 V+!"#$%&'();*******************************;* TwoVoice sound demo *;*-----------------------------*;*Written in ACTION! *;* *;*This program uses the console*;*speaker to produce two sound *;*voices. The play routine *;*parameters are as follows: *;*Frequency1,Frequency2, *;*duration,volume. *;* *;*Volume should be between *;*3 and 18 (the lower the *;*volume, the faster the prg *;*runs). Some distortion may *;*happen when one frequency *;*is very high and the other *;*is very low. Duration is *;*relitive to the volume (time *;*wise). It controls how long *;*the sound plays for. *;* *;* *;* *;* Mike Ireton *;* Sept 24,1986 *;* *;*Please address all comments, *;*questions to me at: *;* *;* R.A.G bbs *;* (707)-539-8889 *;* *;*******************************PROC WAIT(BYTE DELAY)DO[$EA $EA $EA $EA $EA $EA $EA][$EA $EA $EA $EA $EA $EA $EA][$EA $EA $EA $EA $EA $EA $EA]DELAY==-1UNTIL DELAY=0ODRETURNPROC CLICK(BYTE CS)BYTE CONSOL=$D01FCONSOL=8WAIT(CS)CONSOL=0WAIT(CS)RETURNPROC PLAY(BYTE FREQ1,FREQ2,DUR1,DUR2)BYTE F1,F2,S1,S2,DURATION,CSF1=FREQ1:F2=FREQ2S1=F1:S2=F2DURATION=DUR1CS=DUR2DOS1==-1IF S1=0 THEN CLICK(CS)DURATION==-1S1=F1 FIS2==-1IF S2=0 THEN CLICK(CS)DURATION==-1S2=F2 FIUNTIL DURATION=0 OR DURATION=255ODRETURN;Its necessary to turn off all ;interupts because of the time ;critical nature of the sound.;However, there is enough time;for player/missile graphics;as the dma requirements are;praticaly nill compared to;display dma.PROC DEMO()BYTE R1,R2,F1,F2,CTRPOKE($D40E,0)POKE($D400,0)DO R1=RAND(127)+127R2=RAND(127)CTR=254DO F1=(CTR AND R1) F2=(CTR AND R2) PLAY (F1,F2,60,7) CTR==-1 UNTIL CTR=127 ODOD+,-.;BILL:;..the program could ... substitute;key words and identifiers;for user defined abbreviations.....;............ Have you heard of any;programs close to what I described?;-----------------------------------;JIM:;No, but just the opposite is within;normal operation of the compiler. ;i.e. DEFINE PRC="PROC",I_do_declare="BYTE i", loop="DO", this="SETCOLOR(1,0,i)", is="i==+1", the="SETCOLOR (4,i,8)", program="SETCOLOR(2,0,i)", endloop="OD", RET="RETURN" ;____________________________________PRC some_of_my_discoveries() I_do_declare loop This is the program endloopRET;____________________________________;So you can make your programs "read";like anything you want without a ;special conversion program... or did;I miss your point?0123456789:;;Bill:;For inputing a string into the center;of a char array I came up with ;Inputs(ba+a) as equivalent to basic's;INPUT BA$(A). Is there a better way?;------------------------------------;Jim:;I always use two arrays and copy.;(this isn't better, but because;Inputs() is a code block that I don't;understand any better than you do, I;can better control what will happen;from code I have written myself...;I do this WHENEVER I am in doubt about;a library routine!);i.e.;____________________________________MODULEBYTE key=764;____________________________________PROC mid_string(BYTE ARRAY source,dest BYTE source_start, source_length,dest_start) BYTE i FOR i=source_start to source_length+source_start-1 DO dest(dest_start+i-source_start)=source(i) ODRETURN;____________________________________PROC st_elsewhere() BYTE ss,sl,ds BYTE ARRAY inpt(35), output(35)= "1234567890123456789012345678901234" key=255 ;clear key flag GRAPHICS(0);clear screenDO PUT(155) PRINTE("") output(0)=34 ;limit output PRINTE(output) PUT(155) PRINTE("type a little source string.") InputS(inpt) PRINTE("start copy at which byte?") ss=InputB() PRINTE("copy how many bytes?") sl=InputB() PRINTE("starting byte in dest?") ds=InputB() mid_string(inpt,output,ss,sl,ds)ODRETURN;____________________________________; Bill, please feel free to use this;in part or in whole in your own;programs. You, of course, will end;up changing it all arround to suit;yourself but it always helps me to;have something to start with and I;am probably not alone!;PROC mid_string() is the essence ;here and I think it will do just;about everything those 3 string copy;routines that Clinton put in the;library will do... but I have not;used them much. They are limited to;strings of 255 bytes but if you ;declare CARD variables in the ;mid_string parameter "basket->()";instead of BYTEs then you can copy;strings of any length. Also, note;that ALL mid_string does is to: set; ;an element in one string equal to an; ;element of another string. Ρ; ;ΧԠϠ٠ŠȠӠΛ;ԡ The name is JUST the starting;address...the INITIAL SPACE ALLOCATED;IS ALL YOU EVER GET...WHERE THEY LAY;IS WHERE THEY STAY!;You probably don't believe;me. Of course not!;P.S.; Don't be a stranger to the Key! ;If you have some other ideas, ;questions or programming discoveries;share them here! There are at least;five guys that participate on this;board who program in Action!;For others who "find" this in another;city...;we are at THE KEY SYSTEM BBS;In San Leandro CA (415)352 5528;loging off to nit a ragged sleeve!=>?@;BILL:;I feel that @(aa+a) makes;no sense, is it legal?;___________________________________;JIM:;How about using it in a card spliter;routine like this?;__________________________________PROC split_card(CARD card_value) BYTE POINTER bptr BYTE lowbyte,highbyte bptr=@card_value ;<--Byte pointers ;point ONLY to ;BYTES.. right? lowbyte=bptr^ ;get low value bptr=@card_value+1 ;so point ;to the second ;BYTE of this ;card! highbyte=bptr^ ;get high value PUT(155) PrintF("lowbyte= %B %E",lowbyte) PrintF("highbyte= %B %E",highbyte) PUT(155)RETURN;___________________________________PROC card_getter() CARD card_value DO PrintE("gimme a CARD!") card_value=InputC() split_card(card_value) ODRETURNBCDEFGHIJKL;BILL:;I know (pa+a)^ is not legal although;I feel it should be.;------------------------------------;JIM:;How about using a phony ARRAY name;for an "array of pointers" as you;seem to imply here?;i.e.;____________________________________MODULE;BYTE CRSINH=$2F0 ;堢󡛛PROC point_em_out() CARD i ;use as the array element ;parameter to index addresses BYTE ARRAY master_byte CARD ARRAY master_card master_card=0; ;򯲠 ; master_byte=0;lowest possible ;"string" address giving access ;to all memory locations;initial setup master_byte(764)=255;clear key flag;溛 master_byte($2F0)=1 ;CRSINH=1 ;master_card($2F0/2)=1 ;Ʊ ; ; ; ; ;蠱 ; ; ;󮛛 i=764;"index" the pointer to look ;at last key pressed register POSITION(0,9) PRINT(" checking 764 PRESS ") DO POSITION(20,10) PRINTF(" %B ",master_byte(i)) IF master_byte(i)=12 ;RETURN pressed THEN master_byte(i)=255 ;clear 764 i=$D01F;points now at CONSOL POSITION(0,9) PRINT(" checking $D01F PRESS ") ELSEIF master_byte(i)=6 ;START pressed THEN i=764 ;points now at last key pressed POSITION(0,9) PRINT(" checking 764 PRESS ") FI ODRETURN;____________________________________;Bill, as I read this demo again, it;seems cluttered with support and ;message statements; so let me restate;the essential ideas in english:; ;1) Decalare an array... DO NOT ; dimension or fill the array in; the declaration.;2) Set the identifier of the array; equal to zero in the body of the; program.; ;Voila! Instant access to every memory;location in the machine AS IF IT WERE;AN ELEMENT IN THAT ARRAY!(And, by the;way, thank you very much for helping;me to make this discovery for myself);Notice that this completely obviates;that carrot("^") bussiness with ;pointers. Yet you have the same;access to variables as with "pa^";except that now you can do your "+a";with a vengance!;;some example uses;-----------------;split a card variable:;lowbyte=master_byte(@card);highbyte=master_byte(@card+1);;find screen address:;screen=master_card(88/2);;change screen address:;master_card(88/2)=new_screen;;etc. Let me in on anything you;discover!; JimNOPQRSTUVW;************************************;* DIRECT WRITES TO SCREEN *;* USING MOVEBLOCK AND *;* SETBLOCK *;* (but without translation into *;* screen code... another demo!) *;* Jim Warren *;* Key System BBS *;* (415) 352-5628 *;************************************;____________________________________MODULE BYTE ARRAY master_byte CARD ARRAY master_card CARD i;address index for pointer arrays BYTE ARRAY screen_one(962), screen_two(962);____________________________________PROC wait(BYTE delay)BYTE i,ii FOR i=1 TO delay DO FOR ii=0 TO 254 DO OD ODRETURN;____________________________________PROC set_test()CARD position=[82],ilBYTE char1,char2;報캛;MoveBlock(dest_start_adr,;source_start_adr,#_of_bytes_to_copy);i=screen_twochar1=20 char2=22il=0;master_byte(82)=0PRINT("} to screen ram with MoveBlock()")PRINT(" Change delay with 0-9")DO ; il==+1 IF il>=960 THEN il=0 FI char1==+1 char2==+1 ; ; SETBLOCK(screen_one,961,char1) SETBLOCK(screen_two,961,char2) ; ;碠塩 IF i=screen_one THEN i=screen_two ELSE i=screen_one FI ; MoveBlock(master_card(88/2)+position, i,il);;SOUND(1,112+i,10,5) ; IF master_byte(764)=31 THEN wait(5) ELSEIF master_byte(764)=31 THEN wait(10) ELSEIF master_byte(764)=30 THEN wait(15) ELSEIF master_byte(764)=26 THEN wait(20) ELSEIF master_byte(764)=24 THEN wait(25) ELSEIF master_byte(764)=29 THEN wait(30) ELSEIF master_byte(764)=27 THEN wait(35) ELSEIF master_byte(764)=51 THEN wait(60) ELSEIF master_byte(764)=53 THEN wait(90) ELSEIF master_byte(764)=48 THEN wait(110) ELSE FIODRETURN;____________________________________PROC init();;master_byte=0 ;byte_value=master_byte(sys_adr)master_card=0 ;card_value=master_card(sys_adr/2) ;divide by 2 because each element in ;master_card spans 2 memory locationssndrst()set_test()RETURN;____________________________________YZ[\]^_`abcd; Blue Mountains; Copyright (c) 1986; Bruce Blosser; Public Domain, Not for Sale.MODULE BYTE CrsInh=752,DIndex=87, I CARD SdlStl=560,SavMsc=88, ScrnLoc,NewdlDEFINE PrDE="PrintDE",Pl="Plot", Dr="Drawto",Pos="Position", Setc="Setcolor",Gr="Graphics"PROC Wait() ;wait for keypress BYTE Ch=764,RtClok1=20 Ch=255 WHILE ch=255 DO I==+1 Setc(3,6,I) RtClok1=0 DO UNTIl RtClok1=02 OD OD Ch=255RETURNPROC NewDlist() ;Set up new Display list CARD POINTER Dl NewDl=1536 Dl=newdl Dl^=32 ;3 blnk lines Dl==+1 Dl^=112 ;8 blnk lines Dl==+1 Dl^=112 Dl==+1 Dl^=70 ;LMS + Gr. 1 Dl==+1 Dl^=Savmsc Dl==+2 Dl^=2 ;Gr. 0 Dl==+1 Dl^=16 ;2 blnk lines Dl==+1 Dl^=2 Dl==+1 Dl^=16 Dl==+1 Dl^=2 FOR I=1 TO 144 DO Dl==+1 Dl^=12 ;Gr. 14 OD Dl==+1 Dl^=2 Dl==+1 Dl^=16 Dl==+1 Dl^=2 Dl==+1 Dl^=65 Dl==+1 Dl^=NewDlRETURN ;End of NewDListPROC FillScreen() ScrnLoc=SavMsc DIndex=1 Pos(1,0) PrDE(6,"") ScrnLoc==+20 ;Gr1 scrn 20 bytes wide Savmsc=ScrnLoc DIndex=0 Pos(0,0) PrDE(6,"") Pos(39,0) PrDE(6,"") Pos(14,0) PrDE(6,"I know that") Pos(8,1) PrDE(6,"somewhere there must be") Pos(12,2) PrDE(6,"a blue horizon") ScrnLoc==+120 Savmsc=ScrnLoc DIndex=14 Color=1;draw border Pl(2,2):Dr(157,2):Dr(157,141) Dr(2,141):Dr(2,2);draw mountains pl(3,15):Dr(8,12):Dr(20,23):Dr(25,29) Pl(20,23):Dr(26,14):Dr(31,6):Dr(39,18):Dr(45,34) Dr(54,27):Dr(62,48):Pl(54,61):Dr(58,56) Dr(62,48):Dr(68,41):Dr(75,39):Dr(79,36) Dr(82,32):Dr(89,28):Dr(92,24):Dr(94,18) Dr(99,9):Dr(105,7):Dr(108,5):Dr(112,10) Dr(115,8):Dr(119,14):Dr(125,19) Dr(129,28):Dr(138,35):Dr(142,44):Dr(147,51) Pl(135,33):Dr(139,26):Dr(141,22):Dr(148,19) Dr(153,13):Dr(157,9);draw forground hills Pl(3,67):Dr(9,62):Dr(18,58):Dr(24,65):Dr(29,62) Dr(32,69):Dr(38,61):Dr(43,58):Dr(48,55) Dr(54,61):Dr(61,72):Dr(72,64):Dr(78,69) Dr(85,72):Dr(92,65):Dr(96,61):Dr(104,64) Dr(110,56):Dr(115,53):Dr(123,59):Dr(129,65) Dr(135,61):Dr(139,57):Dr(145,55):Dr(151,51) Dr(154,53):Dr(156,51) Pl(62,73):Dr(66,79):Dr(70,85):Dr(73,82):Dr(79,95) Dr(84,102):Dr(88,113):Dr(100,123):Dr(105,130):Dr(111,140) Pl(3,105):Dr(8,93):Dr(15,94):Dr(19,89):Dr(24,81) Dr(29,75):Dr(31,68) Pl(84,104):Dr(90,98):Dr(105,87):Dr(119,79):Dr(124,70):Dr(131,65);draw fence Pl(3,110):Dr(156,110) Pl(3,130):Dr(156,130) FOR I=7 to 154 STEP 8 DO Pl(I,100):Dr(I,140) Pl(I+1,100):Dr(I+1,140) OD ScrnLoc==+2880 ;144*20=2280 Savmsc=ScrnLoc DIndex=0 Pos(5,0) PrDE(6,"hanging lazily on the far side") Pos(0,1) PrDE(6,"") Pos(39,1) PrDE(6,"") Pos(10,01) PrDE(6,"of these mountains.")RETURN ;end of FillScreenPROC Main() BYTE Temp, SdmCtl=559 Gr(14) CrsInh=1 Setc(0,6,10):Setc(2,5,8) Setc(4,10,2):Setc(1,5,4) NewDlist() Temp=SdmCtl :SdmCtl=0 ;Turn off scrn FillScreen() SdlStl=newDl ;switch to new DL SdmCtl=Temp ;Turn on Scrn Wait() Gr(0)RETURNfg;Push/pull registers.;Use inside a dli routine in ACTION!;push reg should be the very first;"statment" in the dli and pullreg;should be the very last. Pullreg;also executes a "rti".;; Mike Ireton; R.A.G bbs; (707)-539-8889;;[$08 $48 $8A $48 $98 $48];PUSH REG[$68 $A8 $68 $AA $68 $28 $40];PULL REGijklmnopqrstuvwxyz{|};*******************************;* scrolling background demo *;*-----------------------------*;*This program is actualy a *;*striped down portion of a *;*game im writing called * ;*"Questar". All this does is *;*init the screen and lets you *;*move a lame looking ship *;*around the screen AND *;*scrolls the background at the* ;*same time... *;* *;*As in most of my demos and *;*stuff, there are routines *;*here that may be "lifted" *;*and used elsewhere. The *;*shift routines are such. *;* *;*Please, if you do decide to *;*use any part of this or *;*modify it, keep my notice *;*in this header. *;* *;* Thank you. *;* *;*Please direct all comments, *;*questions to: *;* *;* Mike Ireton *;* R.A.G bbs *;* (707)-539-8889 *;* *;*******************************MODULEBYTE RTCLOCK=20,RND=$D20ACARD DL=560,TIMMER,DL1,DL2,SM1,SM2;*******************************;* BIT SHIFT ROUTINES *;*-----------------------------*;*Call with the address of the *;*shape and the legnth of the *;*shape. *;*******************************BYTE BTMP,BTMP1,BCTR,BCTR1,FLGBYTE ARRAY WORKSPC(20) PROC SHIFTUP(CARD CHSET,NUM)BTMP=PEEK(CHSET)MOVEBLOCK(CHSET,CHSET+1,7)POKE(CHSET+7,BTMP)RETURNPROC SHIFTDOWN(CARD CHSET,NUM)MOVEBLOCK(WORKSPC,CHSET,8)MOVEBLOCK(CHSET+1,WORKSPC,7)POKE(CHSET,WORKSPC(7))RETURNPROC SHIFTLEFT(BYTE ARRAY BITMAP,BYTE NUM)FOR BCTR=0 TO NUMDOBTMP=BITMAP(BCTR)FLG=(BTMP AND 128):IF FLG#0 THEN FLG=1 FIBTMP==LSH 1BITMAP(BCTR)=BTMP+FLGODRETURNPROC SHIFTRIGHT(BYTE ARRAY BITMAP,BYTE NUM)FOR BCTR=0 TO NUMDOBTMP=BITMAP(BCTR)FLG=(BTMP AND 1):IF FLG#0 THEN FLG=128 FIBTMP==RSH 1BITMAP(BCTR)=BTMP+FLGODRETURNMODULEBYTE DMA=559,PRIOR=623,PMEN=53277, PMHI=54279,TOP=106BYTE ARRAY PCOLOR=704,HPOS=53248, MHPOS=$D004CARD PMBASE,CHSET ;THE GRAPHICS...;PLAYER POSISITONSBYTE ARRAY PUP =[24 24 24 24 60 126 219 219 219 219 126 60 24 24 24 24 1 3 6 255 255 6 3 1 128 192 96 255 255 96 192 128];BACKGROUND...BYTE ARRAY SQUARE1=[170 170 170 170 170 170 170 170], SQUARE2=[85 85 85 85 85 85 85 85];POSITIONS...BYTE JX,JYBYTE ARRAY AJX(4),AJY(4),OLDY(4)PROC SYNC_DISPLAY()BYTE VCOUNT=$D40BDO UNTIL VCOUNT>100ODRETURNPROC WAIT(BYTE DELAY)BYTE VCOUNT=$D40B,OLDDO OLD=VCOUNT WHILE VCOUNT=OLD DO ;HO HUM ODDELAY==-1UNTIL DELAY=0ODRETURNPROC DLI()BYTE CHBAS=$D409,WSYNC=$D40A,BAK=$D018,LUM=$D017,VCOUNT=$D40B,X=[0],I=[3][$08 $48 $8A $48 $98 $48];PUSH REGWSYNC=0CHBAS=$E0:BAK=0:LUM=15WSYNC=0BAK=2+XLUM=13WSYNC=0BAK=4+XLUM=11WSYNC=0BAK=6+XLUM=9WSYNC=0BAK=8LUM=7-XWSYNC=0BAK=10LUM=5WSYNC=0BAK=12+XLUM=3WSYNC=0BAK=14LUM=1WSYNC=0CHBAS=148:BAK=7:LUM=7IF VCOUNT>50 THENRTCLOCK==+1 FITIMMER==+1;I==-1:IF I=0 THEN I=9:X==+4:FI[$68 $A8 $68 $AA $68 $28 $40];PULL REGRETURNMODULEBYTE RIGHT,LEFT,DOWN,UP, DIRECTIONX,DIRECTIONY, DIRECTIONPROC MOVE_GRID()SYNC_DISPLAY()DIRECTIONX=0DIRECTIONY=0IF RIGHT THEN SHIFTLEFT(CHSET,7)DIRECTION=3DIRECTIONX=2FIIF LEFT THEN SHIFTRIGHT(CHSET,7)DIRECTION=2DIRECTIONX=1FIIF DOWN THEN SHIFTUP(CHSET,8)DIRECTION=1DIRECTIONY=2FIIF UP THEN SHIFTDOWN(CHSET,8)DIRECTION=0DIRECTIONY=1FIRETURNPROC INIT()CARD DL=560,DLIVEC=512;Reserve 4k for display+p/m graphicsTOP==-16GRAPHICS(0)ZERO(TOP*256,4086)POKE(756,TOP+4)CHSET=(4+TOP)*256MOVEBLOCK(CHSET,57344,1024)PMBASE=((8+TOP)*256)DMA=62:PMEN=3:PMHI=TOP+8MOVEBLOCK((CHSET-1024),DL,50)SM1=PEEKC(88)SM2=50+(CHSET-1024)DL1=DL:DL2=CHSET-1024 FOR BCTR=6 TO 6+20 DO POKE(DL+BCTR,4) ODPOKE(DL+2,128)POKE(DL+2+25,4+128)DLIVEC=DLIPOKE($D40E,192)ZERO(PMBASE+1024,1024)RETURNMODULEBYTE ARRAY PX(4),PY(4)PROC POSITION_PLAYER(BYTE PLAYERNUM,SHAPE,X,Y,Y1)CARD ADDRESS ADDRESS=PMBASE+1024+(PLAYERNUM*256)ZERO(ADDRESS+Y1-1,10)MOVEBLOCK(ADDRESS+Y,PUP+(SHAPE*8),8)HPOS(PLAYERNUM)=XRETURNPROC MOVE_PLAYER(BYTE BOUNDX,BOUNDX1,BOUNDY,BOUNDY1)BYTE JX,JY,OLDYBYTE ARRAY ADJUSTMENT=[0 255 1]JX=PX(0)JY=PY(0)OLDY=PY(0)JX==+ADJUSTMENT(DIRECTIONX)JY==+ADJUSTMENT(DIRECTIONY)IF JX<=BOUNDX1 AND JX>=BOUNDX THENPX(0)=JX FIIF JY<=BOUNDY1 AND JY>=BOUNDY THENPY(0)=JY FIPOSITION_PLAYER(0,DIRECTION,JX,JY,OLDY)RETURNPROC MAIN()BYTE JX=PX,JY=PYINIT()POKE(752,1)MOVEBLOCK(CHSET,58008,8)MOVEBLOCK(CHSET+8,SQUARE1,8)MOVEBLOCK(CHSET+16,SQUARE2,8)POSITION(0,0) PRINT(" QUESTAR")POSITION(0,23)PRINT("Score:00000000")PRIOR=1FOR BCTR=0 TO 4DOSETCOLOR(BCTR,0,0)ODPCOLOR(0)=157PCOLOR(1)=0PCOLOR(2)=7PCOLOR(3)=14PX(0)=100:PY(0)=100JX=120:JY=100TIMMER=0RIGHT=1LEFT=0UP=0DOWN=0DOBTMP=STICK(0) XOR $0FIF BTMP#0 THEN UP = BTMP AND 1 DOWN = BTMP AND 2 LEFT = BTMP AND 4 RIGHT = BTMP AND 8FIIF RTCLOCK>=2 THEN MOVE_GRID() RTCLOCK=0FIIF (TIMMER MOD 3)=0 THEN MOVE_PLAYER(48,200,32,200) TIMMER==+1FIODRETURNݽ˝캚̫̽޽ۼ̻켬̜ܾˋͻ뻬ܝݻ̼̻̋ުͼ۝ݻ˼ܾښ˻޺̽ݪ˜̼̻ͼܼ˺ܩͼݻ˛ܻ˹͹٪˫˩黼ܻʻ˻˻ګxܻ̽˽ܜ˹fܼ쭼캹gx̻̻ˬfw̻ܺfxʽݽܺfxȾܺyfxx˺ݽ˺fh޺̪yfhުݽ˙Wwuwʻ޻˙vgwug˺ݫ˙vgwefʪͫyffgUgۺۭ˻efUfxʺͼvfUfwܭ̽xvuUfhܻ캨weEVwܺUEUg̺ܻeEegܪ̺wxeEVgx̪̹fgeEWyxxʯʩۙxxwvg̪̺zyuwݛʹ̺̆vgܺxeXy˫˸͖Ugh˻dW˻hʜ۪ͦTXzh̫ͺg˻˧Uw˽g͙ʚwwDi̺Xμ̪vwʻUi˚Wvfgx̼Uhggݸw컘hg̨TX˪vfwxݘwWxͻ˽TXfɪxwfw˺Tj˚xfVzͩݹvVh޻dzifex빙ڙvfjܻ˨siZ˪vFF̩wffy̾tZiuEexݺڇeGx˩JjuT5˚̹gfFxܽˆ[eDxڛˇxeGg˩J˘xe5x{ʪɇweVh۷YhSw۪̪xvfz۪ZzfDg{˺̺vvV̽WgSVۚ޻fۻh˗yxvtWhʻݼvvV̽ܺxF˚͈vF컻ʉEXʫͻ޽xuWۺ쉷șTXʛiV˫몸ɉD9컹˽hw썹ڙTH̪ywޫܽzS7ͬʻۗzx뙩SG̪ڨgzzc8캩̼̽˹vWݬۙcG̪ܪugٻyt7ܺʩfݾۙc7̫ʻɫg쫼jt8٩w;ڙtH˫޻͘vxˬy˄8ݩvy̾캪tHwx̨yu(̼̺ʫxx뇊̈́H˹ˬ켚x̖k뉪9̺ʼyz̔H˹˚˅Jۛ;̺˺ʘY̓Hɛ˭ʺܪztZ̾ۛvJͺ̺ܻ˺kʃZɻ̭ۻu[;ۜs:ͺݭʩtjݪsY۩dk̜cK̹ݺt{ܿ˩bYʫszݽ̬dK͜މˈ|ݿܼ3i߉f̚tn̻3J̫yw̼̚}˹#yʫ˻zfݚ̻͆K˻4jʛjgͪ˼J˹5xʫ멼zf̹͖ܺ*̻d4z͹ٙܬڼܹkf̺˻8ݻUxʪ|ݹ˩yVۺ̩ͧ9˪e7z͹ۚۺW̹7̫bWxɫ˹e˪˹JzʧSVzͩٚ˺vvz޹9{˪Dgjڛݽ޹uH|޽̪5V͜긚ުwGlۮʹEwٛ̉hyyGݼ̺5vݼʹxzߙVͬʨFk캍ʙwΫUܼ̪6v˻˺ʹw˙fʫʇEgͻ۩j˩h̬˙cVwʩzɈjxͻ˫TUwʨʭۇh̜˗4eh˨ɬxj˩ۻ̪DUgܼ˪̪vfh˨xʜ˖5TWں̮ʻfexi˪٫ʻuFUWںܻݼfuwzxʜʅETJʈʫUugiz˺̹˚sECYݺμݸEufzو۪ܹdED\̺̭ɫEufjzܪɉʩSETl˪ʻۨʬEfyz鉬޻̧D5T]͹۾DfzܫڹʙDET~̩ʩٛUxg̫޻ʛ˦4De}ͫɛEiwܫکeDEtɸʬVyg茼̫e4Tfmʩ˜Ehwy،۪̺wSDeey˭˹˚Eh˩DDfv{șڪUg̺dDDfux̻˻ٽUexyxdEDVf{ܺܬNjEUxjeUTgtkͻݽUVvhixgweeEWfݺ̫eVfxiggfUUhv˫ڛUvWxgvVfUUUif˪VggzgxTWVUUxxͩڪܨvgwvWUFUefw˻˨wwxgwyuVUvgͪۻzgwgvxuDUfWx̝۹z˫vgyghxwvDfvgݬixfwhxwgxwfEUfVz˨whxىvvwUewvȩͺ޻yhȜxx٩vxvfegvy˫y̪xx뚈wwXfhv뼛yywxwvgvwiyɧy˻ywghvw}zgۻwfvgyyyΩiʚxvWgyvxyۆʚVUwxwʆzzvexwwxʫhi釈Vwxfevwwyʚʈ긪iXuffgwxxviTVvgwfeggwweVgxwvwwwfxwghXXʽ̹etFew˩vwwffwfv˺cVhgxx˩wWgwwxgX۹dEfgw̩wffgfwfvʫdHhxک˺wwwwgfggWͻvVGwyz˚ʘwfuhvgew̪Eh˩˩vehvfehɪdVh˪˹yuxvweh̺yfeUڪɘhwwfUX˹xvDXxܺ͹wwfz̺hfWfx˻̹xxwvvxʙeWyy̼ʙwxf̹gfwvܼݺʉwwuxʩhyyz̺ʹwfʺw̻˼ʺxwh̻˻˺ɚgfʺۼʫ٨xwɉyɭͼ˫ۘgʫ̪˼xhə̪ۘgʫ̺˺ܨxəx˻ʼͩg˺̼ݩxhʼɩ̻˪͹g˚˼۹x˻ݼ̼˻ͼݩx̻ʻ˺ۻx˪yxˬ̬˩˙yܼʸx۬y̼۪̺̻̩xܬʚ̪̺ܹ۬ʩx̼ˊʚ˘۫ʪxx󠹠ŧɠ